from django.db import models

# Create your models here.

"""
常见字段类型
AutoField 自增的整数字段，通常作为主键使用。Django会自动为每个模型添加一个自增主键。
CharField 用于存储字符串，必须指定最大长度（max_length）。适用于存储较短的文本^1^。
TextField 用于存储大文本字符串，没有长度限制。适用于存储长文本^1^。
IntegerField 用于存储整数，范围为-2147483648到2147483647^1^。
BigIntegerField 用于存储大整数，范围为-9223372036854775808到9223372036854775807^1^。
BooleanField 用于存储布尔值（True或False）^1^。
DateField 用于存储日期，使用Python的datetime.date实例^1^。
DateTimeField 用于存储日期和时间，使用Python的datetime.datetime实例^1^。
FloatField 用于存储浮点数^1^。
DecimalField 用于存储固定精度的十进制数，适用于存储货币等^1^。
UUIDField 用于存储UUID（通用唯一标识符），使用Python的UUID类^1^。
BinaryField 用于存储二进制数据^1^。

关系字段
ForeignKey 多对一关系，连接到另一个模型^2^。
ManyToManyField 多对多关系，连接到另一个模型^2^。
OneToOneField 一对一关系，类似于具有unique=True的ForeignKey^2^。

选项
null
black
db_column
db_index
default
primary_key
unique

外健

"""


class BookInfo(models.Model):
    """图书信息"""
    name = models.CharField(max_length=64, unique=True, verbose_name="书名")
    pub_date = models.DateField(verbose_name="发行日期", null=True, blank=True)
    read_count = models.IntegerField(default=0, verbose_name="阅读量")
    comment_count = models.IntegerField(verbose_name="备注量",default=0)
    is_delete = models.BooleanField(default=False, verbose_name="是/否删除")

    class Meta:
        db_table = 'book_info'  # 数据库中表的名字
        verbose_name_plural = verbose_name = "图书信息"  # 后台管理中显示为中文信息

    def __str__(self):
        return self.name


class AuthorInfo(models.Model):
    """作者信息"""
    name = models.CharField(verbose_name="作者姓名", max_length=64)
    gender_choice = (
        (1, "男"),
        (2, "女"),
    )
    gender = models.IntegerField(verbose_name="性别", choices=gender_choice, default=1)
    description = models.CharField(verbose_name="简介", max_length=256, null=True, blank=True)
    is_delete = models.BooleanField(verbose_name="是/否删除", default=0)
    # on_delete=models.CASCADE 主表删除后其他表级联删除， set_null 也可以设置为空，protect 保护，抛出异常
    book = models.ForeignKey(verbose_name="著作", to=BookInfo, on_delete=models.CASCADE)

    class Meta:
        db_table = 'author_info'
        verbose_name_plural = "作者信息"

    def __str__(self):
        return self.name
